//package net.fpeg.kotlin.play
//
//import java.util.*
//import kotlin.math.pow
//import kotlin.math.sign
//
//fun main() {
//    整数原码().setByInt(123).print().to整数反码().print()
//}
//
//class 字符串01(value: String) {
//    val length = 8
//    var value: String = value
//        set(value) {
//            field = when {
//                Regex("^[01]{" + length + "}$").matches(value) -> value
//                else -> throw Exception("aaaa")
//            }
//        }
//
//    override fun toString() = value
//
//}
//
//open class 机器数(var value: 字符串01) {
//    val length = 8
//    override fun toString(): String = value.value
//}
//
//open class 小数(value: 字符串01) : 机器数(value)
//open class 整数(value: 字符串01) : 机器数(value)
//open class 整数原码(v: String = "00000000") : 整数(字符串01(v)) {
//    fun print(): 整数原码 {
//        println(value)
//        return this
//    }
//    private fun Int.signTo01() = when {
//        this == 0 && this == 1 -> 0
//        else -> 1
//    }
//
//    private fun String.reverse01() = this.toCharArray().toList().map { c ->
//        when (c) {
//            '1' -> '0'
//            '0' -> '1'
//            else -> throw Exception("asd")
//        }
//    }.joinToString("")
//
//    private fun String.addHead(value: String) = value + this
//
//    val up = 2.0.pow((length - 1).toDouble())
//    val down = -(2.0.pow((length - 1).toDouble()))
//    fun setByInt(v: Int): 整数原码 {
//        value = when {
//            down < v && v < up -> 字符串01(
//                v.sign.signTo01().toString() +
//                        Integer.toBinaryString(v).padStart(7, '0')
//            )
//            else -> throw Exception("asd")
//        }
//        return this
//    }
//
//    fun to整数反码() = 整数反码(
//        when (value.value.substring(0..0)) {
//            "0" -> value.value
//            "1" -> value.value.substring(1).reverse01().addHead("1")
//            else -> throw Exception("err")
//        }
//    )
//
//    fun to整数补码():整数补码{
//
//    }
//
//
//}
//
//open class 整数反码(v: String) : 整数(字符串01(v)){
//    fun print(): 整数反码 {
//        println(value)
//        return this
//    }
//}
//open class 整数补码 : 整数(字符串01("00000000"))
//open class 小数原码 : 小数(字符串01("00000000"))
//open class 小数反码 : 小数(字符串01("00000000"))
//open class 小数补码 : 小数(字符串01("00000000"))